﻿using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Collections.Generic;

namespace System.Windows.Controls
{
    //public static class UIElementExtention
    //{

    //    /// <summary>
    //    /// 获取某个UI的所有子控件
    //    /// </summary>
    //    /// <param name="ui"></param>
    //    /// <returns></returns>
    //    public static List<DependencyObject> GetChildrens(this DependencyObject ui)
    //    {
    //        List<DependencyObject> list = new List<DependencyObject>();
    //        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(ui); i++)
    //        {
    //            list.Add(VisualTreeHelper.GetChild(ui, i));
    //        }
    //        return list;
    //    }

    //    public static List<T> GetChildrens<T>(this DependencyObject ui) where T : DependencyObject
    //    {
    //        List<T> list = new List<T>();
    //        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(ui); i++)
    //        {
    //            var item = VisualTreeHelper.GetChild(ui, i);
    //            if (item is T)
    //            {
    //                list.Add(item as T);
    //            }
    //        }
    //        return list;
    //    }
    //    /// <summary>
    //    /// 获取跟某个UI同级的UI列表
    //    /// </summary>
    //    /// <typeparam name="T"></typeparam>
    //    /// <param name="element"></param>
    //    /// <returns></returns>
    //    public static List<T> GetSameLevel<T>(this DependencyObject element) where T : DependencyObject
    //    {
    //        List<T> list = new List<T>();
    //        DependencyObject parent = element.GetParent();
    //        if (parent != null)
    //        {
    //            foreach (var item in parent.GetChildrens())
    //            {
    //                if (item is T)
    //                {
    //                    list.Add(item as T);
    //                }
    //            }
    //        }
    //        return list;
    //    }

    //    /// <summary>
    //    /// 获取某个UI的所有子孙控件
    //    /// </summary>
    //    /// <typeparam name="T"></typeparam>
    //    /// <param name="element"></param>
    //    /// <returns></returns>
    //    public static List<DependencyObject> GetAllDescendants(this DependencyObject element)
    //    {
    //        List<DependencyObject> descendants = new List<DependencyObject>();
    //        foreach (var item in element.GetChildrens())
    //        {
    //            List<DependencyObject> list = item.GetAllDescendants();
    //            descendants.AddRange(list);
    //            descendants.Add(item);
    //        }
    //        return descendants;
    //    }
    //    /// <summary>
    //    /// 通过空间的名字来查询某个UI的所有子控件
    //    /// </summary>
    //    /// <param name="element"></param>
    //    /// <param name="name"></param>
    //    /// <returns></returns>
    //    public static List<FrameworkElement> GetAllDescendantsWithName(this FrameworkElement element, string name)
    //    {
    //        List<FrameworkElement> descendants = new List<FrameworkElement>();
    //        foreach (var item in element.GetChildrens<FrameworkElement>())
    //        {
    //            List<FrameworkElement> list = item.GetAllDescendantsWithName(name);
    //            descendants.AddRange(list);
    //            if (item.Name == name)
    //            {
    //                descendants.Add(item);
    //            }
    //        }
    //        return descendants;
    //    }

    //    public static List<T> GetAllDescendants<T>(this DependencyObject element) where T : DependencyObject
    //    {
    //        List<T> descendants = new List<T>();
    //        foreach (var item in element.GetChildrens())
    //        {
    //            List<T> list = item.GetAllDescendants<T>();
    //            descendants.AddRange(list);
    //            if (item is T)
    //                descendants.Add(item as T);
    //        }
    //        return descendants;
    //    }
    //    /// <summary>
    //    /// 获取某个UI的父控件
    //    /// </summary>
    //    /// <param name="element"></param>
    //    /// <returns></returns>
    //    public static DependencyObject GetParent(this DependencyObject element)
    //    {
    //        return VisualTreeHelper.GetParent(element);
    //    }
    //    /// <summary>
    //    /// 获取某个UI的第N级父控件
    //    /// </summary>
    //    /// <param name="element"></param>
    //    /// <param name="parentLevel"></param>
    //    /// <returns></returns>
    //    public static DependencyObject GetParent(this DependencyObject element, int parentLevel)
    //    {
    //        DependencyObject parent = element.GetParent();
    //        if (parent == null)
    //            return null;
    //        if (parentLevel == 1)
    //        {
    //            return parent;
    //        }
    //        return parent.GetParent(--parentLevel);
    //    }
    //    public static T GetParent<T>(this DependencyObject element) where T : DependencyObject
    //    {
    //        DependencyObject parent = element.GetParent();
    //        if (parent == null)
    //            return default(T);
    //        if (parent is T)
    //            return parent as T;
    //        else
    //            return parent.GetParent<T>();

    //    }
    //}
}
